home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / benchmarks / itc / sas / sas.h < prev   
Encoding:
C/C++ Source or Header  |  1989-08-30  |  4.3 KB  |  189 lines

  1. /* $Header: sas.h,v 2.10 88/06/30 16:03:15 hilfingr Exp $ */
  2.  
  3. /* Data shared by lexer and parser. */
  4.  
  5.  
  6. #define TRUE  -1
  7. #define FALSE 0
  8.  
  9. typedef int bool;
  10.  
  11. #define LASTINTREG   31
  12. #define LASTFLOATREG 15
  13. #define FIRSTUSERID   4
  14.  
  15. #define SEGMENT_ALIGN 8        /* Segments aligned to multiple of this. */
  16.  
  17. extern int currentSegment;    /* Current region number into which 
  18.                  * instructions are being assembled.  Possible
  19.                  * values in #defines just above. */
  20.  
  21. #define LONG   4
  22. #define WORD   2
  23. #define BYTE   1
  24. #define SINGLE 4
  25. #define DOUBLE 8
  26.  
  27.  
  28. /* Offsets and masks defining SPUR instructions. */
  29.  
  30. #define opCodePosn    25
  31. #define destPosn    20
  32. #define src1Posn    15
  33. #define src2Posn     9
  34. #define condPosn    20
  35. #define jumpOpCodePosn    28
  36. #define storeHighPosn    20
  37. #define shortImmedPosn     9
  38. #define tagImmedPosn     9
  39.  
  40. #define immedFlag    0x00004000
  41. #define immedMask    0x00003fff
  42. #define immedSign    0x00002000
  43. #define lowStoreMask    0x000001ff
  44. #define highStoreMask    0x01f00000
  45. #define shortImmedMask    0x00003e00
  46. #define tagImmedMask    0x00007e00
  47. #define maxUnsignedRcLit 0x00001fff
  48. #define maxComputedLiteral 0x0007ffff
  49. #define minComputedLiteral 0xfff80000
  50.  
  51. #define eq_tag_immed_code 0x19
  52. #define ne_tag_immed_code 0x1d
  53.  
  54. /* Opcode modifier bits */
  55.  
  56. #define instModifierBits 0xffffff00    /* Bits that may modify an opcode, without being
  57.                      * part of it. */
  58. #define simulatorOpMask 0x100        /* Indicates simulator instruction. */
  59.  
  60. /* Opcodes for special-case handling of Nop */
  61. #define nopOpcode     (0x4b | simulatorOpMask)
  62.  
  63. #define add_ntOpcode      0x48
  64. #define rd_specialOpcode  0x55
  65. #define jump_regOpcode      0x5a
  66. #define ld_32Opcode      0x04
  67. #define sllOpcode      0x45
  68. #define xorOpcode      0x44
  69. #define orOpcode      0x43
  70.  
  71. #define pc_sreg          3
  72.  
  73. /* Symbols */
  74.  
  75. struct _symbolType {
  76.     int id;        /* Numeric id for this symbol (ordinal symbol
  77.              * number for user symbols) */
  78.     int type;        /* Symbol's type (see a.out.h for user symbols; for 
  79.              * special symbols, see parser.h) */
  80.     int other, desc;    /* Values for n_other and n_desc fields. */
  81.     struct _symbolType *link;  /* Hash table chain used for interning. */
  82.     struct _symbolType *next;  /* symbol entry with next higher id. */
  83.     int            segment; /* Region number if relative to segment. */
  84.     unsigned int       value;  /* Numeric value if absolute, or offset */
  85.     char string[1];     /* Symbol (variable width) */
  86. };
  87.  
  88. typedef struct _symbolType    symbolType;
  89.  
  90. /* Expressions */
  91. typedef enum { MANIFEST_INT, SYM_EXPR, BINARY_EXPR, UNARY_EXPR }
  92.                     exprClassType;
  93.  
  94. struct _exprType {
  95.     exprClassType    class;
  96.     union {
  97.     int         opcode;
  98.     unsigned int    value;
  99.     symbolType    *sym;
  100.     } v;
  101.     unsigned int offset;
  102.     struct _exprType    *left, *right;
  103. };
  104.  
  105. typedef struct _exprType    exprType;
  106.  
  107. #define nullExpr ((exprType *) NULL)
  108.  
  109. typedef enum { REG, IMMED }    operandStyleType;
  110.  
  111. struct _operandType {
  112.     operandStyleType    type;
  113.     exprType         *expr;
  114.     int         number;
  115. };
  116. typedef struct _operandType    operandType;
  117.  
  118. #define ErrorMsg \
  119.        {   \
  120.        errorHeader(); errorCount += 1; (void) fprintf(stderr,
  121.    
  122. #define WarningMsg \
  123.        { \
  124.        errorHeader(); (void) fprintf(stderr,
  125.  
  126. #define EndMsg   \
  127.        ); (void) putc('\n',stderr); }
  128.  
  129. extern int errorCount;        /* Count of number of errors. */
  130. extern int linecount;        /* Line number in current source file */
  131. extern char filename[];        /* Current source file name */
  132. extern int nextId;        /* Next available symbol ordinal--number of symbols
  133.                  * in symbol table. */
  134. extern symbolType *firstSym; /* First user-defined symbol (i.e., one with lowest
  135.                   * ordinal. */
  136.  
  137. extern void
  138.     exit2();
  139.  
  140. extern exprType 
  141.     *numToExpr(),
  142.     *symToExpr(),
  143.     *consUnaryExpr(),
  144.     *consBinaryExpr(),
  145.     *pointExpr(),
  146.     *fwdTempLabelToExpr(),
  147.     *bckwdTempLabelToExpr();
  148.  
  149. extern unsigned int
  150.     emitConvertedExpr();
  151.  
  152. extern symbolType *
  153.     newSymbol();
  154.  
  155. extern void
  156.     errorHeader(),
  157.     initLexer(),
  158.     initParser(),
  159.     initExprs(),
  160.     assignId(),
  161.     setGlobalSym(),
  162.     setExternSym(),
  163.     emitStab(),
  164.     setAssemblerReg(),
  165.     emitBytes(),
  166.     emitExpr(),
  167.     setAlignment(),
  168.     setSymDefn(),
  169.     SetOrg(),
  170.     leaveSpace(),
  171.     emitFloat(),
  172.     DefineLabel(),
  173.     DefineTempLabel(),
  174.     emitReloc(),
  175.     emitRRxInst(),
  176.     emitStoreInst(),
  177.     emitRxCmpInst(),
  178.     emitCmpTagInst(),
  179.     emitJumpInst(),
  180.     writeObject(),
  181.     setSymCommDefn(),
  182.     setSymLcommDefn(),
  183.     initSas();
  184.  
  185. /* Various C library things. */
  186.  
  187. extern char
  188.     *malloc();
  189.